package com.zouxian.processor;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;

public class MyProcessor implements PageProcessor {
	// 抓取网站的相关配置，包括编码、抓取间隔、重试次数等
	private Site site = Site.me().setRetryTimes(3).setSleepTime(100);
	private static int count = 0;

	public Site getSite() {
		return site;
	}

	/*
	 * 知道要爬的内容在哪个位置之后。我们还需要知道怎样才能拿到这些数据。
	 * 
	 * 这里说一下webmagic的内容
	 * 
	 * 启动爬虫就这句：Spider.create(new
	 * MyProcessor()).addUrl("https://www.cnblogs.com/"
	 * ).thread(5).run();//addUrl就是种子url
	 * 
	 * Page对象就是当前获取的页面，
	 * 
	 * getUrl()可以获得当前url，
	 * 
	 * addTargetRequests()就是把链接放入等待爬取
	 * 
	 * getHtml()获得页面的html元素
	 */
	public void process(Page page) {
		// 判断链接是否符合http://www.cnblogs.com/任意个数字字母-/p/7个数字.html格式
		if (!page.getUrl()
				.regex("http://www.cnblogs.com/[a-z 0-9 -]+/p/[0-9]{7}.html")
				.match()) {
			// 加入满足条件的链接
			page.addTargetRequests(page
					.getHtml()
					.xpath("//*[@id=\"post_list\"]/div/div[@class='post_item_body']/h3/a/@href")
					.all());
		}
		// 获取页面需要的内容
		System.out
				.println("抓取的内容："
						+ page.getHtml()
								.xpath("//*[@id=\"Header1_HeaderTitle\"]/text()")
								.get());
		count++;

	}

	public static void main(String[] args) {
		long startTime, endTime;
		System.out.println("开始爬取...");
		startTime = System.currentTimeMillis();
		Spider.create(new MyProcessor()).addUrl("https://www.cnblogs.com/")
				.thread(5).run();
		endTime = System.currentTimeMillis();
		System.out.println("爬取结束，耗时约" + ((endTime - startTime) / 1000)
				+ "秒，抓取了" + count + "条记录");
	}

}